#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <string.h>
#include <assert.h>

//void* my_memcpy(char* dest, const char* src, size_t x)
//{
//	assert(dest && src);
//	void* ret = dest;
//	while (x--)
//	{
//		*dest = *src;
//		dest++;
//		src++;
//	}
//	return ret;
//}
//
//int main()
//{
//	char arr1[20] = { 0 };
//	char* arr2 = "hello world!";
//	printf("%s\n", (char*)memcpy(arr1, arr2,strlen(arr2)));
//	printf("%s\n", (char*)my_memcpy(arr1, arr2,strlen(arr2)));
//	return 0;
//}
void* my_memmove(char* dest, const char* src, size_t x)
{
	assert(dest && src);
	int cnt = strlen(src)-1;
	if (dest < src)
	{
		while (x--)
		{
			*(char*)dest = *(char*)src;
			dest++;
			src++;
		}
	}
	else
	{
		while (x)
		{
			*(dest + x) = *(src + cnt);
			x--;
			cnt--;
		}
	}
}

int main()
{
	char str[] = "memmove can be very useful......";
	memmove(str + 20, str + 15, 11);
	puts(str);
	my_memmove(str + 20, str + 15, 11);
	puts(str);
	return 0;
}